package controlador;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import vistajuego.BaseVista;
import vistajuego.Dibujable;
import vistajuego.ObjetoVivo;


public class ControladorJuego {
			
		public ControladorJuego(){
			this.objetosVivos = new ArrayList();
			this.dibujables = new ArrayList();
		}
		
		public void comenzar(){
			estaEnEjecucion = true;
			try{
			while(estaEnEjecucion){
				simular();
				dibujar();
				Thread.sleep(intervaloSimulacion);
			}
			}
			catch (Exception e) {
				e.printStackTrace();
			}
		}
		public void detener(){
			this.estaEnEjecucion = false;
		}
		
		public void agregarObjetoVivo(ObjetoVivo objetoVivo){
			objetosVivos.add(objetoVivo);
		}
		
		public void removerSimulador(ObjetoVivo objetoVivo){
			objetosVivos.remove(objetoVivo);
		}

		public void agregarDibujable(Dibujable unDibujable){
			dibujables.add(unDibujable);
		}
		
		public void removerDibujable(Dibujable unDibujable){
			dibujables.remove(unDibujable);
		}
		
		public long getIntervaloSimulacion() {
			return intervaloSimulacion;
		}

		public void setIntervaloSimulacion(long intervaloSimulacion) {
			this.intervaloSimulacion = intervaloSimulacion;
		}


		private void dibujar() {
			
			Iterator iterador = dibujables.iterator();
			while(iterador.hasNext()){
				Dibujable dib = (Dibujable)iterador.next();
				dib.dibujar(this.baseVista);
				System.out.println(dib.getPosicionable().getX());
				System.out.println( dib.getPosicionable().getY());
			}		
			this.baseVista.actualizar();
		}
		
		private void simular() {
			this.baseVista.limpiar();
			Iterator iterador = objetosVivos.iterator();
			while(iterador.hasNext()){
				((ObjetoVivo)iterador.next()).vivir();
			}
		}

		public BaseVista getBaseVista() {
			return baseVista;
		}

		public void setBaseVista(BaseVista baseVista) {
			this.baseVista = baseVista;
		}
		
		private long intervaloSimulacion;
		private boolean estaEnEjecucion;
		private List objetosVivos;
		private List dibujables;
		private BaseVista baseVista;	
	}


